package _6链表实例;

// 链表类
public class LinkedList {
	// 指向头节点的引用
	Node head = null;

	// 节点类
	public class Node {
		// 每个节点包含两部分内容
		// 1. 本节点数据
		String data;
		// 2. 指向下一个节点的引用
		Node next;
	}

	// 添加数据
	public void add(String d) {
		// 第一步：创建一个新的节点,将数据放入
		Node n = new Node();
		n.data = d;

		// 第二步： 放入链表
		// 情况1: 如果链表空 ，新节点直接作为头结点
		// 情况2: 如果链表不为空 ，找到最后一个节点，放在它后面
		if (head == null) {
			head = n;
		} else {
			// 先指向头结点,
			// 依次判断每一个节点是否是最后一个节点
			Node tmp = head;
			// 判断当前的节点后面有没有节点
			while (tmp.next != null) {
				// 如果后面还有节点,tmp去指向后面那个节点,继续判断
				tmp = tmp.next;
			}
			// 最后一个节点指向新节点
			tmp.next = n;
		}
	}

	// 打印输出
	void print() {
		System.out.print("[");
		// 先指向头结点
		Node tmp = head;
		// 判断指向的节点后面有没有节点
		while (tmp != null) {
			// 输出当前节点数据
			System.out.print(tmp.data + ",");
			// 指向后面那个节点
			tmp = tmp.next;
		}
		System.out.println("]");
	}

	void remove(String name) {
		// 1. 如果头结点就是要删除的元素
		// 链表的head指向第二个节点

		// 2. 如果不是头结点
		// 定义一个tmp指向头结点
		// 逐个判断当前节点tmp的下一个节点是不是要删除的元素
		// 如果是 则当前节点的next指向下下个节点
	}
	
	// 删除数据
	void delete(String d) {
		if (head == null)
			return;
		if (head.data.equals(d)) {
			head = head.next;
			return;
		} else {
			Node temp = head;
			while (temp.next != null) {
				if (temp.next.data.equals(d)) {
					temp.next = temp.next.next;
				} else {
					temp = temp.next;
				}
			}
		}

	}

}
